class Solution {
public:
    string longestPalindrome(string s) {
        if(s.size() == 0)
            return s;

        // 中心扩展算法
        // begin 起始位置，len 字符长度
        int begin = 0, len = 0, n = s.size();
        for(int i = 0; i < n; i++)
        {
            // 先做一次奇数长度扩展
            int left = i, right = i; 
            while(left >= 0 && right < n && s[left] == s[right])
            {
                left--;
                right++;
            }
            if(right - left - 1 > len)
            {
                begin = left + 1;
                len = right - left - 1;
            }

            // 再做一次偶数长度扩展
            left = i, right = i + 1;
            while(left >= 0 && right < n && s[left] == s[right])
            {
                left--;
                right++;
            }
            if(right - left - 1 > len)
            {
                begin = left + 1;
                len = right - left - 1;
            }
        }
        return s.substr(begin, len);
    }
};